/*
    created: 2023/4/1
    filename: BUilder.h
    author: 李东霖
    purpose: Builder模式的演示代码

*/
#include"Builder.h"
#include<iostream>


//class Director
//传入一个Builder基类指针来构造Director
Director::Director(Builder* pBuilder):m_pBuilder(pBuilder)
{

}
Director::~Director()
{
    if(nullptr != m_pBuilder)
    {
        delete m_pBuilder;
        m_pBuilder = nullptr;
    }
}

//提供一个构建产品的方法
//构建一个产品需要两个部分，他们的装配方式是一样的
//所以我们先构建partA在构建partB，具体是有谁来完成，那就看m_pBuilder指向哪一个派生类 
void Director::Construct()
{
    m_pBuilder->BuiderPartA();
    m_pBuilder->BuiderPartB();
}


//实现ConcreateBuilder1类的接口
void ConcreateBuilder1::BuiderPartA()
{
    std::cout<<"通过派生类ConcreateBuilder1 来构建BuiderPartA"<<std::endl;

}
void ConcreateBuilder1::BuiderPartB()
{
    std::cout<<"通过派生类ConcreateBuilder1 来构建BuiderPartB"<<std::endl;
} 

//实现ConcreateBuilder2类的接口
void ConcreateBuilder2::BuiderPartA()
{
    std::cout<<"通过派生类ConcreateBuilder2 来构建BuiderPartA"<<std::endl;
}
void ConcreateBuilder2::BuiderPartB()
{
    std::cout<<"通过派生类ConcreateBuilder2 来构建BuiderPartB"<<std::endl;
}